package ch07
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;

	import utils.Ball;

	/**
	 * 拖拽影片
	 * @author sjp
	 *
	 */
	public class MouseMoveDrag extends Sprite
	{
		private var ball:Ball;
		/**
		 * 鼠标点击时，保存鼠标在ball上的偏移量，移动时加上，使得移动更真实.
		 * */
		private var tempLocalX:Number=0;
		private var tempLocalY:Number=0;

		public function MouseMoveDrag()
		{
			init();
		}

		private function init():void
		{
			ball=new Ball();
			ball.x=100;
			ball.y=100;
			addChild(ball);
			/**
			 * 这里有一个技巧，我们要为移动的影片设置 mouseDown 侦听器，而对其它两个事件则在 stage 中进行侦听。
			 * 因为，有时可能拖拽的速度比 Flash 刷新影片位置的速度要快。
			 * 这样一来，如果用影片侦听 mouseUp 和 mouseMove 事件，将有可能不会响应，下一时刻也许鼠标指针就已经不在影片上了。请记住，无论鼠标在哪儿， stage 都将把这些事件发送出去。
			 */
			ball.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
		}

		private function onMouseDown(event:MouseEvent):void
		{
			tempLocalX=event.localX;
			tempLocalY=event.localY;
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
		}

		private function onMouseUp(event:MouseEvent):void
		{
			stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
		}

		private function onMouseMove(event:MouseEvent):void
		{
			ball.x=mouseX - tempLocalX;
			ball.y=mouseY - tempLocalY;
		}
	}
}